// 存储弹出窗口的ID
let popupWindowId = null;

// 处理快捷键命令
chrome.commands.onCommand.addListener((command) => {
  if (command === "_execute_action") {
    togglePopupWindow();
  }
});

// 处理工具栏图标点击
chrome.action.onClicked.addListener(() => {
  togglePopupWindow();
});

/**
 * 切换窗口显示状态
 * 如果窗口已存在则关闭,否则创建新窗口
 */
async function togglePopupWindow() {
  // 如果窗口已经存在
  if (popupWindowId !== null) {
    try {
      // 获取窗口信息
      const window = await chrome.windows.get(popupWindowId);
      if (window) {
        // 关闭窗口
        await chrome.windows.remove(popupWindowId);
        popupWindowId = null;
        return;
      }
    } catch (error) {
      // 窗口可能已经被关闭，重置 ID
      popupWindowId = null;
    }
  }

  // 设置新窗口的尺寸
  const width = 280;
  
  // 获取屏幕尺寸信息
  const screen = await chrome.system.display.getInfo();
  const screenWidth = screen[0].workArea.width;
  const screenHeight = screen[0].workArea.height;
  
  // 计算窗口位置（靠右显示）
  const left = screenWidth - width;
  const top = 0;

  // 创建弹出窗口，高度设置为屏幕高度
  const popup = await chrome.windows.create({
    url: 'popup.html',
    type: 'popup',
    width: width,
    height: screenHeight,
    left: left,
    top: top,
    focused: true
  });

  // 保存新窗口ID
  popupWindowId = popup.id;

  // 监听窗口关闭事件
  chrome.windows.onRemoved.addListener(function onRemoved(windowId) {
    if (windowId === popupWindowId) {
      popupWindowId = null;
      chrome.windows.onRemoved.removeListener(onRemoved);
    }
  });
}

/**
 * 处理来自 popup 的消息
 * 主要处理获取股票数据的请求
 */
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.type === 'fetchStock') {
    fetchStockData(request.code)
      .then(data => sendResponse(data))
      .catch(error => {
        console.error('获取股票数据失败:', error);
        sendResponse(null);
      });
    return true;
  }
});

/**
 * 获取股票数据
 * @param {string} code - 股票代码
 * @returns {Promise<Object|null>} 返回解析后的股票数据或null
 */
async function fetchStockData(code) {
  try {
    // 发起HTTP请求获取数据
    const response = await fetch(`https://qt.gtimg.cn/q=${code}`, {
      headers: {
        // 设置接受GBK编码,因为接口返回GBK格式数据
        'Accept-Charset': 'GBK,utf-8;q=0.7,*;q=0.3'
      }
    });
    // 将响应转换为GBK编码的文本
    const buffer = await response.arrayBuffer();
    const decoder = new TextDecoder('gbk');
    const text = decoder.decode(buffer);
    return parseStockData(text,code);
  } catch (error) {
    console.error('请求股票数据失败:', error);
    return null;
  }
}

/**
 * 解析股票数据
 * @param {string} text - 原始股票数据文本
 * @param {string} request_code - 请求的股票代码
 * @returns {Object|null} 返回解析后的股票数据对象或null
 */
function parseStockData(text,request_code ) {
  try {
    // 使用正则表达式匹配数据
    const match = text.match(/v_\w+="(.+?)"/);
    if (!match) return null;

    // 解析股票信息
    const parts = match[1].split('~');
    const name = parts[1];
    const code = request_code;//parts[2];
    const price = parseFloat(parts[3]);
    const close = parseFloat(parts[4]); // 昨收
    const change = parseFloat((price - close).toFixed(2));
    const changePercent = parseFloat(((price - close) * 100 / close).toFixed(2));

    // 返回格式化的数据对象
    return {
      name,
      code,
      price,
      change,
      changePercent
    };
  } catch (error) {
    console.error('解析股票数据失败:', error);
    return null;
  }
} 